// Copyright  2004-2008 Backplane Ltd.
//
// This file is part of Ubiquity formsPlayer
//
// Ubiquity formsPlayer is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3 of the License, or (at your
// option) any later version.
//
// Ubiquity formsPlayer is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details.
//
// You should have received a copy of the GNU General Public License
// along with Ubiquity formsPlayer If not, see <http://www.gnu.org/licenses/>.
//	
//
//   Purpose: implementation of CImplNodesetBinding.
//   $Id$


#include "stdafx.h"
#include "nodesetBinding.h"
#include "boundNode.h"

CImplNodesetBinding::CImplNodesetBinding(CXFormsElementNodesetBinding* pElement)
	: CImplNodeBinding((CXFormsElement*) pElement)
	,m_ulCursor(0)
//	,m_sNodeset(".")
{
	m_bisBound = true;
	m_pbsXPathExpression = &m_sNodeset;
	m_bApplyFirstNodeRule = false;
}

CImplNodesetBinding::CImplNodesetBinding()
:m_ulCursor(0)
{
	m_bisBound = true;
	m_pbsXPathExpression = &m_sNodeset;
	m_bApplyFirstNodeRule = false;
}


ULONG CImplNodesetBinding::getCursor()
{
	return m_ulCursor;
}

void CImplNodesetBinding::getInstanceNode(const unsigned long lIndex,IXMLDOMNode ** ppNode)
{
	const unsigned int i = m_vertices.GetSize();
	if(i > 0 && i > lIndex)
	{
		//no need to re-run the XPath statement, 
		//	just return the stored node.
		CBoundNode * pBoundNode = m_vertices.GetAt(lIndex)->m_pInstanceNode;
		if(pBoundNode)
		{
			pBoundNode->getNode(ppNode);
		}
		*ppNode = NULL;
	}
	else
	{
		*ppNode = NULL;
	}

}